from django.shortcuts import redirect
from django.urls import reverse
from django.utils.deprecation import MiddlewareMixin

# print(request.META)
# remote_host = request.META['REMOTE_HOST']
# print(remote_host)
# print(request.path)
# 这个request对象就是我们视图中的request
# print(request.COOKIES)

# 有时会因为一个斜杆，下面输出看一下print(request.path)
login_list = ['/user/',]


class MiddleWare1(MiddlewareMixin):
    # 重写方法
    def process_request(self, request):
        # print('中间件-------------------------------------------------------------------->request')
        # 获取远程访问服务器的ip地址，可以做爬虫拦截，但这个力度太大了，直接你来就return你
        # print(request.META['REMOTE_ADDR'])
        path = request.path
        # print(request.path)
        if path in login_list:
            # 如果当前用户没有登录
            if not request.user.is_authenticated:
                return redirect(reverse('user:login'))

#     # 进去视图前调用这个中间件函数（可以想象成路由匹配），匹配到了才会走视图，这些个参数就是视图的传递参数
#     def process_view(self, request, callback, callback_args, callback_kwargs):
#         # print('中间件------------------------------------------------->process_view')
#         pass
#     # render(request,'xxx.html')
#     # 只要你有渲染模板的动作就会走这个中间件函数，前提是这个中间件得定义了这个方法哈
#     def process_render_template(self):
#         pass
#
#     # 只要有异常
#     def process_exception(self):
#         pass
#
#     # 处理的是响应部分,该中间件方法调用的时间是执行完后台视图生成response后，才能拿着又倒回去走一篇所有的中间件的process_respoonse
#     # 只有这个方法必须返回HttpResponse对象，而视图不也是这个要求吗，用途就是可以压缩返回的html页面（gzip所请求的页面）
#     def process_response(self, request, response):
#         # print('中间件------------------------------------------------->process_response')
#         return response
#
#
# class MiddleWare2(MiddlewareMixin):
#     # 重写方法
#     def process_request(self, request):
#         # print('中间件-------------------------------------------------------------------->2')
#         # print(request.META)
#         remote_host = request.META['REMOTE_HOST']
#         print(remote_host)
#         print(request.path)
